// app/schedule/sync_orders.js
'use strict';

const { Subscription } = require('egg');

class SyncOrders extends Subscription {
  static get schedule() {
    return {
      cron: '0 0/15 * * * ?', // 每15分钟同步
      type: 'worker',
      immediate: true,
    };
  }

  async subscribe() {
    const { ctx } = this;

    // 熔断保护：检查 Redis 是否可用
    if (!ctx.app.redis || ctx.app.circuitBreaker.isOpen('redis')) {
      ctx.logger.warn('[熔断保护] Redis不可用，跳过本次订单同步');
      return;
    }

    try {
      // 获取上次同步时间
      const lastSyncTime = await ctx.app.redis.get('last_order_sync_time');
      const startTime = lastSyncTime || dayjs().subtract(1, 'hour').format('YYYY-MM-DD HH:mm:ss');
      const endTime = dayjs().format('YYYY-MM-DD HH:mm:ss');

      // 添加任务到队列
      const job = await ctx.service.queue.addJob('order-sync', 'fetchAndSaveOrders', {
        startTime,
        endTime,
        forceSync: false
      });

      ctx.logger.info(`订单同步任务已添加到队列，任务ID: ${job.id}`);
      await ctx.app.redis.set('last_order_sync_schedule', Date.now());
    } catch (error) {
      ctx.logger.error('添加订单同步任务到队列失败:', error);
      ctx.service.errorLog.record('order_sync_schedule', `任务添加失败: ${error.message}`);
    }
  }
};

module.exports = SyncOrders;